package com.xiaotu.dto;

import lombok.Data;


/**
 * 积分计算
 *
 * @author zhangxiao
 * @create 2022-04-24 15:10
 */
@Data
public class CalculateIntegralDto {

    /**
     * 玩家ID
     */
    private Integer playerId;

    /**
     * 对局后积分
     */
    private Integer news;

    /**
     * 对局前积分
     */
    private Integer olds;

    /**
     * 积分涨浮
     */
    private Integer integralRiseFall;

    /**
     * 放大系数
     */
    private Integer k;

    /**
     * 为对局结果 ( 胜为 1 负为 0 和为 0.5)
     */
    private double res;

    /**
     * 为期望结果值，也就是玩家获胜的几率
     * Exp=1/(10^(Dr/400)+1)
     */
    private Double exp;

    /**
     * Dr=( 对手积分 - 你的积分 ) + Yfirst ；
     * 若为先手， Yfirst=-100 ；反之 Yfirst=+100;
     */
    private Integer dr;

    /**
     * 对方积分
     */
    private Integer otherCalculate;

    /**
     * 自己积分
     */
    private Integer selfCalculate;

    /**
     * 若为先手， Yfirst=-100 ；反之 Yfirst=+100;
     */
    private Integer yFirst;

    /**
     * 最小值为 0
     *
     * @return
     */
    public Integer getCalculateNews() {
        return new Double(this.olds + this.k * (this.res - this.exp)).intValue();
    }

    public Integer getCalculateDr() {
        return (this.otherCalculate - this.selfCalculate) + this.yFirst;
    }

    public Double getCalculateExp() {
        return 1 / (Math.pow(10, getCalculateDr() / 400) + 1);
    }

    public void invokeIntegralRiseFall() {
        this.integralRiseFall = Math.round(this.news) - this.olds;
    }

}
